package cn.tedu.review;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/*本类用于练习map案例,统计字符串中字符的个数
 * 需求效果:用户输入aabbcc,输出{a=2,b=2,c=2}*/
public class TestMap {
    public static void main(String[] args) {
        //1.提示并接收用户输入的字符串
        System.out.println("请您输入要统计的字符串");
        String input = new Scanner(System.in).nextLine();//new Scanner(System.in).nextLine()//输入字符
        //2.准备一个map集合,用来存放出现的字符与字符的次数
        //为什么要使用字符作为KEY?因为map中的key不允许重复
        //也就是说字符不允许重复,但字符出现的次数可以重复//字符不允许重复,但是字符出现次数可以重复
        Map<Character,Integer> map = new HashMap();
        System.out.println(map);

        //3.准备向map中存入数据
        //3.1遍历用户输入的字符串,拿到每个字符
        for (int i = 0; i < input.length(); i++) { //length()表示字符串长度方法
            char key = input.charAt(i);
            System.out.println(key); //String对应的下标字符内容=map的key
            //System.out.println(key);//打印查看每轮循环获取到的字符串下标的字符,没有问题
            //3.2根据刚刚获取到的key拿到对应的value,map的key对应的value最开始都是null
            Integer value = map.get(key);//看看map中有没有存贮字母key,,,
            if(value == null){//之前这个字符没有出现过,次数还是Integer的默认值null
                map.put(key,1);//没出现过,次数(map的值value的值)就设置为1//通过HashMap集合对象的key,给HashMap集合对象重新赋值,覆盖null,或之前的值
            }else{//value不是null,说明之前已经存过次数了
                map.put(key,value+1);//出现过,次数就设置为之前的次数+1
            }
        }
        System.out.println("各个字符出现的次数为:"+map);

    }
}


/**
 *PS:
 * 1)先通过字符串对象input的每一个字符charAt()获取map的key,
 * 2) 通过hashMap对象map的key, 通过方法put计算出key(String对应各个下表的字符)出现的次数
 */

